home *** CD-ROM | disk | FTP | other *** search
-
-
-
- BTREE(3) BTREE(3)
-
-
- NNAAMMEE
- btree - btree database access method
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<ssyyss//ttyyppeess..hh>>
- ##iinncclluuddee <<ddbb..hh>>
-
- DDEESSCCRRIIPPTTIIOONN
- The routine _d_b_o_p_e_n is the library interface to database
- files. One of the supported file formats is btree files.
- The general description of the database access methods is
- in _d_b_o_p_e_n(3), this manual page describes only the btree
- specific information.
-
- The btree data structure is a sorted, balanced tree struc-
- ture storing associated key/data pairs.
-
- The btree access method specific data structure provided
- to _d_b_o_p_e_n is defined in the <db.h> include file as fol-
- lows:
-
- typedef struct {
- u_long flags;
- u_int cachesize;
- int maxkeypage;
- int minkeypage;
- u_int psize;
- int (*compare)(const DBT *key1, const DBT *key2);
- size_t (*prefix)(const DBT *key1, const DBT *key2);
- int lorder;
- } BTREEINFO;
-
- The elements of this structure are as follows:
-
- flags The flag value is specified by _o_r'ing any of the
- following values:
-
- R_DUP Permit duplicate keys in the tree, i.e. per-
- mit insertion if the key to be inserted
- already exists in the tree. The default
- behavior, as described in _d_b_o_p_e_n(3), is to
- overwrite a matching key when inserting a
- new key or to fail if the R_NOOVERWRITE flag
- is specified. The R_DUP flag is overridden
- by the R_NOOVERWRITE flag, and if the
- R_NOOVERWRITE flag is specified, attempts to
- insert duplicate keys into the tree will
- fail.
-
- If the database contains duplicate keys, the
- order of retrieval of key/data pairs is
- undefined if the _g_e_t routine is used, how-
- ever, _s_e_q routine calls with the R_CURSOR
- flag set will always return the logical
-
-
-
- August 18, 1994 1
-
-
-
-
-
- BTREE(3) BTREE(3)
-
-
- ``first'' of any group of duplicate keys.
-
- cachesize
- A suggested maximum size (in bytes) of the memory
- cache. This value is oonnllyy advisory, and the access
- method will allocate more memory rather than fail.
- Since every search examines the root page of the
- tree, caching the most recently used pages substan-
- tially improves access time. In addition, physical
- writes are delayed as long as possible, so a moder-
- ate cache can reduce the number of I/O operations
- significantly. Obviously, using a cache increases
- (but only increases) the likelihood of corruption
- or lost data if the system crashes while a tree is
- being modified. If _c_a_c_h_e_s_i_z_e is 0 (no size is
- specified) a default cache is used.
-
- maxkeypage
- The maximum number of keys which will be stored on
- any single page. Not currently implemented.
-
- minkeypage
- The minimum number of keys which will be stored on
- any single page. This value is used to determine
- which keys will be stored on overflow pages, i.e.
- if a key or data item is longer than the pagesize
- divided by the minkeypage value, it will be stored
- on overflow pages instead of in the page itself.
- If _m_i_n_k_e_y_p_a_g_e is 0 (no minimum number of keys is
- specified) a value of 2 is used.
-
- psize Page size is the size (in bytes) of the pages used
- for nodes in the tree. The minimum page size is
- 512 bytes and the maximum page size is 64K. If
- _p_s_i_z_e is 0 (no page size is specified) a page size
- is chosen based on the underlying file system I/O
- block size.
-
- compare
- Compare is the key comparison function. It must
- return an integer less than, equal to, or greater
- than zero if the first key argument is considered
- to be respectively less than, equal to, or greater
- than the second key argument. The same comparison
- function must be used on a given tree every time it
- is opened. If _c_o_m_p_a_r_e is NULL (no comparison func-
- tion is specified), the keys are compared lexi-
- cally, with shorter keys considered less than
- longer keys.
-
- prefix Prefix is the prefix comparison function. If spec-
- ified, this routine must return the number of bytes
- of the second key argument which are necessary to
- determine that it is greater than the first key
-
-
-
- August 18, 1994 2
-
-
-
-
-
- BTREE(3) BTREE(3)
-
-
- argument. If the keys are equal, the key length
- should be returned. Note, the usefulness of this
- routine is very data dependent, but, in some data
- sets can produce significantly reduced tree sizes
- and search times. If _p_r_e_f_i_x is NULL (no prefix
- function is specified), aanndd no comparison function
- is specified, a default lexical comparison routine
- is used. If _p_r_e_f_i_x is NULL and a comparison rou-
- tine is specified, no prefix comparison is done.
-
- lorder The byte order for integers in the stored database
- metadata. The number should represent the order as
- an integer; for example, big endian order would be
- the number 4,321. If _l_o_r_d_e_r is 0 (no order is
- specified) the current host order is used.
-
- If the file already exists (and the O_TRUNC flag is not
- specified), the values specified for the parameters flags,
- lorder and psize are ignored in favor of the values used
- when the tree was created.
-
- Forward sequential scans of a tree are from the least key
- to the greatest.
-
- Space freed up by deleting key/data pairs from the tree is
- never reclaimed, although it is normally made available
- for reuse. This means that the btree storage structure is
- grow-only. The only solutions are to avoid excessive
- deletions, or to create a fresh tree periodically from a
- scan of an existing one.
-
- Searches, insertions, and deletions in a btree will all
- complete in O lg base N where base is the average fill
- factor. Often, inserting ordered data into btrees results
- in a low fill factor. This implementation has been modi-
- fied to make ordered insertion the best case, resulting in
- a much better than normal page fill factor.
-
- EERRRROORRSS
- The _b_t_r_e_e access method routines may fail and set _e_r_r_n_o
- for any of the errors specified for the library routine
- _d_b_o_p_e_n(3).
-
- SSEEEE AALLSSOO
- _d_b_o_p_e_n(3), _h_a_s_h(3), _m_p_o_o_l(3), _r_e_c_n_o(3)
-
- _T_h_e _U_b_i_q_u_i_t_o_u_s _B_-_t_r_e_e, Douglas Comer, ACM Comput. Surv.
- 11, 2 (June 1979), 121-138.
-
- _P_r_e_f_i_x _B_-_t_r_e_e_s, Bayer and Unterauer, ACM Transactions on
- Database Systems, Vol. 2, 1 (March 1977), 11-26.
-
- _T_h_e _A_r_t _o_f _C_o_m_p_u_t_e_r _P_r_o_g_r_a_m_m_i_n_g _V_o_l_. _3_: _S_o_r_t_i_n_g _a_n_d
- _S_e_a_r_c_h_i_n_g, D.E. Knuth, 1968, pp 471-480.
-
-
-
- August 18, 1994 3
-
-
-
-
-
- BTREE(3) BTREE(3)
-
-
- BBUUGGSS
- Only big and little endian byte order is supported.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- August 18, 1994 4
-
-
-